##########数据结构###########
#1.向量
##创建向量
a <- c(2, 4, 6, 8, 9)
a

b <- c("red", "blue", "green")
b

c <- c(TRUE, FALSE, FALSE, TRUE, T, F)  #注意两个c含义不同
c

d <- c(1:10)  #R中“n1:n2”可表示数字n1至n2
d

##访问向量中的元素
a[2]       #访问向量a中的第2个元素
a[c(1, 4)] #访问向量a中的第1和4个元素
a[c(1:3)]  #访问向量a中的第1到3个元素
a[1:3]     #访问向量a中的第1到3个元素（向量函数c可省）

#2.矩阵
##创建矩阵
matrix(vector,  nrow,ncol, bynow, dimnames)
m1 <- matrix(1:20, nrow=5, ncol=4) #创建5行4列矩阵，矩阵内数据为1~20

##访问矩阵中的元素
m1[2,4]        #表示访问m1矩阵里第2行第4列的元素
m1[2,c(2,3)]   #表示访问m1矩阵里第2行第2列和第3列的元素
m1[3,]         #表示访问m1矩阵里第3行的所有元素
m1[,4]         #表示访问m1矩阵里第4列的所有元素


#3.数组
##创建数组
array(vector, dimensions, dimnames)
array1 <- array(1:24, c(2,3,4)) #创建4个2行3列矩阵组成的数组，矩阵内数据为1~24
array1

##访问数组
array1[2,3,1]   #和矩阵类似，只不过多一个维度


#4.数据库
##创建数据框
data.frame(col1, col2, col3)

patientID <-c(1, 2, 3, 4)
age<-c(25, 34, 28, 52)
diabetes <-c("Type1", "Type2", "Type1", "Type1")
status <-c("Poor", "Improved", "Excellent", "Poor")
patientdata <-data.frame(patientID, age, diabetes, status)
patientdata

##访问数据框数据
patientdata[2]
patientdata[2,]
patientdata[,2]
patientdata[2,2]

patientdata[c(1,3),2:4] 

patientdata["age"]  #列名必须打引号！
patientdata$age

#5.因子
class(diabetes) #diabetes向量是字符串，存储的"Type1", "Type2"……等单词
diabetes

diabetes <- factor(diabetes)
class(diabetes)
diabetes      #转为因子，成为类别（名义型）变量

##要表示有序型变量，需要为函数factor()指定参数ordered=TRUE
status        #同样存储的单词

status <- factor(status, ordered=TRUE)
status        #转为因子，成为有序类别（有序型）变量，但按字母顺序排序，可能无意义


status <-factor(status, order=TRUE,
                levels=c("Poor", "Improved", "Excellent"))
              #参数levels是因子按指定顺序排序

#6.列表
list1 <- list(a, b, diabetes, status, patientdata)
list1

##访问列表数据
list1[[2]]      #双层中括号，$符号也可访问有名字的对象
list1[[5]]$age  #可向下级再次访问

##list可嵌套
list2 <- list(list1, age)
list2

list2[[1]]
list2[[1]][[5]]
list2[[1]][[5]]$age